import QtQuick 1.0
import "../Models"
import "../Delegates"
import "../Util/Util.js" as Util

//メニュー

Rectangle {
    id: _root
    x: 0
    y: 0
    radius: 5
    gradient: Gradient {
        GradientStop {
            position: 0
            color: "#040240"
        }

        GradientStop {
            position: 1
            color: "#000a16"
        }
    }
    border.width: 2
    border.color: "#6bcbf7"
    height: 1

    property alias model: _list.model
    signal clicked(int index)    //クリックイベント
    signal pressed(variant event, int index)

    // フォーカス設定
    function setForceActiveFocus(){
        _list.currentIndex = 0;
        _list.forceActiveFocus();
    }


    Keys.onPressed: {
        pressed(event, _list.currentItem.itemIndex);
        switch(event.key){
        case Qt.Key_Escape:
        case Qt.Key_Enter:
        case Qt.Key_Return:
            _list.currentIndex = 0;
            break;
        default:
            break;
        }
    }

    ////////////////////////////////////
    // ハイライト用
    Component {
        id: _highlightBar
        Rectangle {
            width: (_list.currentItem === null) ? 0 : _list.currentItem.width
            height: (_list.currentItem === null) ? 0 : _list.currentItem.height
            color: "#995F2833"
            radius: 5
            y: (_list.currentItem === null) ? 0 : _list.currentItem.y;
            Behavior on y { SmoothedAnimation { duration: 200 } }
//            Behavior on y { SpringAnimation { spring: 2; damping: 0.1 } }
        }
    }

    ListView {
        id: _list
        anchors.fill: parent
        // ハイライト設定
        highlight: _highlightBar
        highlightFollowsCurrentItem: false

        // -のところをスキップする
        property int prevIndex: 0
        onCurrentIndexChanged: {
            var offset = 0;
            if(currentItem.itemTitle === "-"){
                if(prevIndex > currentIndex){
                    // 上へ移動
                    offset = -1;
                }else{
                    // したへ移動
                    offset = 1;
                }
            }
            prevIndex = currentIndex;
            if(offset !== 0){
                currentIndex += offset;
            }
        }

        delegate: DelegateContext {
            id: _delegate
            itemIndex: _index
            itemTitle: _title

            Component.onCompleted: {
                _root.width = _delegate.width;
                _root.height += _delegate.height + 1;
                // ↑の+1がポイント
                // １アイテム出来る事にココが呼ばれるので高さを
                // +1して次のアイテムも見える範囲に入れて生成を促す

//                Util.outputDebugString("title=" + _title
//                                       + ",rh=" + _root.height
//                                       + ",ch=" + _list.contentHeight
//                                       + ",dh=" + _delegate.height)
            }

            onClicked: {
                _root.clicked(itemIndex);
            }
        }
    }


    //領域外にコンテキストがはみ出るなら調整する
    function adjustX(x){
        if((x + width) <= parent.width){
            //はみ出ない
        }else{
            //はみ出てる
            x = parent.width - width - 5;
            if(x < 0){
                x = 0;
            }
        }
        return x;
    }
    function adjustY(y){
        if((y + height) <= parent.height){
            //はみ出ない
        }else{
            //はみ出てる
            y = parent.height - height - 5;
            if(y < 0){
                y = 0;
            }
        }
        return y;
    }
}

